import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

# 设置中文字体
font = FontProperties(fname=r'C:/Windows/Fonts/simhei.ttf', size=12)  # 请确保 simhei.ttf 文件路径正确

# 读取 Excel 文件
file_path = 'data_with_county.xlsx'
df = pd.read_excel(file_path)

# 定义一个函数来生成柱状图
def plot_top_countries(df, mark_value, title):
    # 筛选出 mark 列为指定值的行
    filtered_df = df[df['mark'] == mark_value]
    
    # 统计每个国家出现的次数
    country_counts = filtered_df['county'].value_counts().head(10)
    
    # 创建柱状图
    plt.figure(figsize=(12, 8))
    bars = plt.bar(country_counts.index, country_counts.values, color='skyblue')
    
    # 标注具体出现次数
    for bar in bars:
        yval = bar.get_height()
        plt.text(bar.get_x() + bar.get_width()/2, yval + 0.5, yval, ha='center', va='bottom', fontproperties=font)
    
    # 设置图表标题和标签
    plt.title(title, fontproperties=font)
    plt.xlabel('国家', fontproperties=font)
    plt.ylabel('频率', fontproperties=font)
    plt.xticks(rotation=45, ha='right', fontproperties=font)  # 旋转 x 轴标签以便更好地显示
    plt.tight_layout()
    
    # 显示和保存图表
    plt.savefig(f'top_{mark_value}_countries.png', dpi=300, bbox_inches='tight')
    plt.show()

# 生成 mark 为 1 时的 Top10 国家柱状图
plot_top_countries(df, 1, 'Mark 为 1 时的 Top10 国家')

# 生成 mark 为 2 时的 Top10 国家柱状图
plot_top_countries(df, 2, 'Mark 为 2 时的 Top10 国家')